<?php

/**
 * 请求类
 * ============================================================================
 * api说明：
 * init(),初始化函数，默认给一些参数赋值，如cmdno,date等。
 * getGateURL()/setGateURL(),获取/设置入口地址,不包含参数值
 * getKey()/setKey(),获取/设置密钥
 * getParameter()/setParameter(),获取/设置参数值
 * getAllParameters(),获取所有参数
 * getRequestURL(),获取带参数的请求URL
 *
 * ============================================================================
 *
 */
class RequestHandler
{

    // 网关url地址
    var $gateUrl;

    // 密钥
    var $key;

    // 请求的参数
    var $parameters;

    // debug信息
    var $debugInfo;

    function __construct()
    {
        $this->gateUrl = "https://mch.tenpay.com/cgi-bin/mchbatchtransfer.cgi";
        $this->key = "";
        $this->parameters = array();
        $this->debugInfo = "";
    }

    /**
     * 初始化函数。
     */
    function init()
    {
//        $this->setParameter('sign_type', 'MD5');
//        $this->setParameter('input_charset', 'UTF-8');
    }

    /**
     * 获取入口地址,不包含参数值
     */
    function getGateURL()
    {
        return $this->gateUrl;
    }

    /**
     * 设置入口地址,不包含参数值
     */
    function setGateURL($gateUrl)
    {
        $this->gateUrl = $gateUrl;
    }

    /**
     *获取密钥
     */
    function getKey()
    {
        return $this->key;
    }

    /**
     *设置密钥
     */
    function setKey($key)
    {
        $this->key = $key;
    }

    /**
     *获取参数值
     */
    function getContent()
    {
        return $this->parameters['content'];
    }

    /**
     *设置参数值
     */
    function setContent($parameterValue)
    {
        $this->parameters['content'] = $parameterValue;
    }

    /**
     * 获取所有请求的参数
     * @return array
     */
    function getAllParameters()
    {
        return $this->parameters;
    }

    /**
     * 获取带参数的请求URL
     */
    function getRequestURL()
    {
        $this->createSign();

        $reqPar = "";
        ksort($this->parameters);
        foreach ($this->parameters as $k => $v) {
            $reqPar .= $k . "=" . urlencode($v) . "&";
        }

        // 去掉最后一个&
        $reqPar = substr($reqPar, 0, strlen($reqPar) - 1);
        $requestURL = $this->getGateURL() . "?" . $reqPar;
        return $requestURL;
    }

    /**
     * 创建abstract
     */
    function createSign()
    {
        $sign = md5(md5($this->parameters['content']) . $this->key);
        $this->parameters['abstract'] = $sign;
    }
}